const directives = {
  imgerror: {
    inserted (el, binding, vnode, oldVnode) {
      // binding 一个对象，包含以下 property
      // name：指令名，不包括 v- 前缀
      // value：指令的绑定值，例如：v-my-directive="1 + 1" 中，绑定值为 2
      // oldValue：指令绑定的前一个值，仅在 update 和 componentUpdated 钩子中可用。无论值是否改变都可用
      // expression：字符串形式的指令表达式。例如 v-my-directive="1 + 1" 中，表达式为 "1 + 1"
      // arg：传给指令的参数，可选。例如 v-my-directive:foo 中，参数为 "foo"
      // modifiers：一个包含修饰符的对象。例如：v-my-directive.foo.bar 中，修饰符对象为 { foo: true, bar: true }
      el.src = el.src || binding.value
      el.onerror = function () {
        el.src = binding.value
      }
    },
    componentUpdated (el, binding, vnode, oldVnode) {
      el.src = el.src || binding.value
    },
    unbind (el, binding, vnode, oldVnode) {
      el.onerror = null
    }
  }
}

export default function (Vue, options) {
  Object.keys(directives).forEach(key => {
    Vue.directive(key, directives[key])
  })
}
